/**
 * \file PluginInterface_Linux.h
 * \brief Plugin interface declaration class for Windows platforms
 * \author Edouard ROGE
 * \date 16 March 2013
 */
#ifndef _PLUGININTERFACE_LINUX_
#define _PLUGININTERFACE_LINUX_

#include <string>

/**
 * \class IPlugin
 * \brief Base class for every plug-in interface
 */
class IPlugin
{
public:

	/**
	 * \fn const std::string & GetName() const = 0;
	 * \return Plug-in name
	 * \brief Get the name of the plug-in
	 */
	virtual const std::string & GetName() const = 0;

	/**
	 * \fn virtual ~IPlugin()
	 * \brief Destructor
	 */
	virtual ~IPlugin(){}

};

#define EXPORT_PLUGIN(PluginClass)	extern "C"\
{\
	__attribute__((visibility("default"))) IPlugin * CreatePlugin() { return new PluginClass(); }\
	__attribute__((visibility("default"))) void ReleasePlugin(IPlugin * _pPlugin) { delete _pPlugin; }\
}

#endif // _PLUGININTERFACE_WIN32_
